﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include <vector>
#include "IIfcObject.h"
#include "OwnerPtr.h"

namespace gcmp
{
    class IIfcEntity;

    /// \brief 创建IFC聚合类对象
    class GCMP_IFC_INTERFACE_EXPORT IIfcAggregate : public IIfcObject
    {
        DEFINE_CAST_DERIVED(gcmp::IIfcAggregate, gcmp::IIfcObject);
    public:
        /// \brief 创建IFC聚合类对象。
        /// \param attributeObjects 本对象要设置的属性值集合
        /// \return 返回IFC聚合类对象指针
        ///注意：IIfcAggregate对象只能创建一个由vector集合组成的对象，只是作为IIfcEntity对象的一个属性存在，并不能单独加入到IFC的BuildingModel中
        static OwnerPtr<IIfcAggregate> Create(const std::vector<const IIfcObject*>& attributeObjects);

        /// \brief 对IFC聚合类对象克隆。
        /// \return 返回克隆后的IFC聚合类对象指针
        virtual OwnerPtr<IIfcAggregate> Clone() const = 0;

        /// \brief 析构函数
        virtual ~IIfcAggregate() {}

        /// \brief 获取该IFC对象的属性个数。
        /// \return 返回该IFC对象的属性个数
        ///可以在设置本对象属性时查询使用
        virtual size_t GetAttributesNumber() const = 0;

        /// \brief 获取该对象的属性集合
        /// \return 返回该对象的属性集合
        virtual std::vector<OwnerPtr<IIfcObject>> GetAttributeObjects() const = 0;
    };
}
